Ext.apply(Ext.form.VTypes, {
    AlphaNum:  function(v) {
        return /^[a-z0-9]$/i.test(v);
    }
    ,AlphaNumText: 'Must be an alphanumeric word'
    ,AlphaNumMask: /[a-z0-9]/i

    ,timeEstimate : function(v)
    {
        return /^(\d)+[ ]?(h|d|mmd)?$/.test(v);
    }
    ,timeEstimateText : 'Time estimate with integer value and unit (h,d,mmd)'
    ,timeEstimateMask: /[0-9 hdm]/i

    ,workinghours : function(v)
    {
        return /^(\d)([,.:][0-9]{1,2})?[ ]?(h)?$/.test(v);
    }
    ,workinghoursText : 'Working hours in format hh:mm, h.m or h,m'
    ,workinghoursMask: /[0-9 \:\,\.h]/

    ,username : function(v)
    {
        return /^\w{3,20}$/.test(v);
    }
    ,UsernameeMask: /^[0-9a-z_.@]$/
    ,usernameText: '3-20 letters required'

    ,password: function(val, field) {
        if (field.initialField) {
            var pwd = Ext.getCmp(field.initialField);
            return (val == pwd.getValue());
        }
        return true;
    }
    ,passwordText: 'The passwords entered do not match!'
    ,complex : function (v)
    {
        return /^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/.test(v);
    }
    ,complexText : 'Must be at least 8 characters containgin<br/>lower- and uppercase letter and digit'
});